\ print -- Printer support \ 10/10/84 rw Version 1 \ 11/22/84 cbd Added vectors for system printing \ 12/19/84 ssg Moved selectors; added formfeed; \ Added echovec stuff to +print, -print. \ 12/31/84 ssg Converted to module. \ 2/13/85 cbd subclass of PBDrvr instead of File \ 12/19/85 cdn Renamed ff to np (new page), to avoid conflict with $ ff \ 6/27/86 cdn Improved error message for Reset failure \ July 90 mrh Mops version. Decimal // drvr scon PRNAME ".Print" :class PRINTFCB super{ PBdrvr } :m PINIT: prname name: self -3 put: IORefNum ;m :m RESET: 7 put: csCode 0 put: IOBuffer 1 put: csp1 0 put: csp2 addr: header fcall PBControl abort" Reset Failed; Printer Driver may be missing from disk" ;m :m FF: 7 put: csCode 0 put: IOBuffer 2 put: csp1 0 put: csp2 addr: header fcall PBControl abort" FF failed" ;m :m LF: 7 put: csCode 0 put: IOBuffer 3 put: csp1 0 put: csp2 addr: header fcall PBControl abort" LF failed" ;m :m OPEN: pinit: self open: super reset: self abort" Can't open printer" ;m :m PRINT: \ ( addr len -- ) 5 put: csCode put: IOBuffer addr: header 28 + ! addr: header fcall PBControl abort" Print failed" ;m :m PEMIT: \ ( char -- ) pad c! pad 1 print: self ;m :m CLOSE: ff: self close: super abort" Can't close printer" ;m ;class printFcb PRINTER : +PRINT \ Enables simultaneous printing of Neon screen text \ Note: this definition must precede PEMIT etc, so we \ can tick the exported versions of these words. Vital so \ that the module gets called properly from the vectors!! open: printer ['] pemit -> pemitvec ['] echo -> echovec ['] ptype -> ptypevec ['] pcr -> pcrvec ; : -PRINT 0 -> pemitvec 0 -> echovec 0 -> ptypevec 0 -> pcrvec drop: printMod ; : PINIT open: printer ; : PEMIT pemit: printer ; : PTYPE print: printer ; : PCR lf: printer $ 0a ( ASCII linefeed ) pemit ; : NP ff: printer ; : ECHO \ ( c -- ) Echoes to printer AND screen. dup emitvec pemitvec ;